大家好!我目前正在就讀資訊類科系,平常以接觸程式撰寫居多,對於資安領域的技術沒有太多了解因此希望藉由這30天的機會,以OWASP ZAP作為主要工具,從實際操作和分析,從環境架設、基本掃描到進階弱點發掘,一步步建立資安思維。
我將學習如何利用ZAP自動化掃描常見的資安漏洞,並理解其背後的原理,例如SQL Injection、XSS等,讓我從「資安小白」進化成具備基本滲透測試技能的「資安入門者」。
滲透測試(Penetration Testing),是指藉由模擬攻擊,來找出系統、應用程式、設備或網站等等的安全漏洞並進行修復、修補,使能夠在受到真正的攻擊之前,提早發現安全漏洞並加以改善,以提升整體資訊安全,檢測範圍包含軟、硬體。而「弱點掃描」與其不同的,是使用「自動化掃描工具(軟體)」在短時間內,找到漏洞或弱點,且檢測範圍僅限作業系統及軟體系統(網站程式),我個人認為更像是人們的全身健康檢查,找出身體內尚未發現的病灶,防範未然。
OWASP ZAP,全名為Zed Attack Proxy,是於2010年9月由Open Web Application Security Project(OWASP)所開發的開源安全測試工具,而OWASP是一個非營利組織,致力於改善軟體應用的安全性,提供各種工具、指南與資源。2023年8月起,負責開發與維護ZAP的團隊宣布OWASP ZAP脫離OWASP基金會,並加入軟體安全專案(The SOFTWARE SECURITY PROJECT, SSP)。
它主要用來協助開發者和安全測試人員在開發和測試階段,自動找出網頁應用程式中的安全漏洞,例如SQL injection、跨站腳本(XSS) 等。ZAP透過充當瀏覽器和伺服器之間的代理(Man-in-the-Middle Proxy),來截取和分析HTTP/HTTPS流量,從而發現潛在的安全問題。以具有免費、開源(開放原始程式碼)、跨平台(可在多種作業系統上運行)等特性為代表性,主要應用於Web應用的安全測試、滲透測試、主動/被動掃描(弱點掃描)、支援API測試等方面。
1. SQL injection(SQL注入)
指透過修改SQL語句,欺騙資料庫伺服器執行非預期的指令,來對資料庫進行攻擊。
舉例:
以一個網站的登入功能為例,後端會將用戶輸入的帳號密碼組合成一條SQL指令,去資料庫查詢是否有符合的使用者:
SELECT * FROM users WHERE username = '你的帳號' AND password = '你的密碼';
如果攻擊者在「帳號」欄位輸入 ' OR '1'='1,那麼原本的查詢指令就會變成:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '你的密碼';
而因為'1'='1'這個條件永遠成立,資料庫就會被欺騙,即使沒有輸入正確的密碼,也可能成功登入,使驗證機制形同虛設。
可能造成的危害: 資料丟失、資料外洩、資料竄改、影響網站運作等。
防禦方式:
2. Cross-site scripting(XSS跨站指令攻擊)
為一種從用戶端插入惡意程式碼(亦或是攻擊腳本)的攻擊方式,指將惡意程式碼附加到合法網站上,當用戶載入網站時,程式碼就會執行以達到某項目的,最常見的附加方式為新增至連結的尾部,或是直接發布到用戶所產生內容的頁面上。
跨域(cross-site),指的是這種攻擊方式,通常是從可信的來源發出,因此能夠繞過同源政策(same origin policy)。
同源政策(Same-Origin Policy,SOP) 是一種瀏覽器的安全機制,就是同一個網站(同源)的網頁腳本(如JavaScript)才能訪問同源的資源(如網頁、圖片等),不同網站(跨源)的網頁腳本則會被限制訪問,以防止惡意網站竊取敏感數據。 同源是指兩個網頁具有相同的協議(protocol,例如http或https)、域名(domain)和端口(port)。
依照惡意程式碼的存放方式及插入方式,XSS攻擊分為三種:
1. (最常見)反射型XSS(Reflected XSS): 攻擊者將惡意程式碼藏在URL中,並誘騙受害者點擊這個惡意連結。當受害者的瀏覽器請求這個網址時,伺服器會將URL中的惡意程式碼「反射」回頁面,並在受害者瀏覽器上執行。這種攻擊屬於「非持久性」的,只在點擊連結時發生一次。
2. 儲存型XSS(Stored XSS): 攻擊者將惡意程式碼存入網站的資料庫中,例如在留言板、論壇、文章內容中,當其他使用者瀏覽到這則惡意內容時,惡意程式碼就會從資料庫中被讀取出來,並在他們的瀏覽器上執行。這種攻擊是「持久性」的,危害最大。
3. DOM型XSS(DOM-based XSS): 這種攻擊與伺服器無關,而是利用瀏覽器端(Client-side)的JavaScript漏洞,當JavaScript程式碼處理來自URL或其他使用者輸入的資料時,沒有正確處理,導致惡意程式碼在瀏覽器的DOM (Document Object Model) 結構中被執行。
舉例:
以一個具留言板功能的網站為例,如果網站沒有過濾使用者留言中的HTML或JavaScript標籤,攻擊者就可以在留言中寫下惡意的程式碼:
這是一個正常的留言 <script>alert('你被XSS攻擊了!');</script>
當其他使用者瀏覽這則留言時,瀏覽器會將 ... 標籤內的程式碼當作網站的一部分來執行,而不是單純的文字。這時,受害者就會看到一個彈跳視窗,顯示「你被XSS攻擊了!」。
可能造成的危害: 個資外洩、帳號劫持、釣魚攻擊(竊取帳密)、散波惡意軟體及網站等。
防禦方式: